package priv.conceit.study.book.lambda.chapter5;

import priv.conceit.study.book.lambda.common.entity.Album;
import priv.conceit.study.book.lambda.common.entity.SampleData;
import priv.conceit.study.book.lambda.common.entity.Track;

import java.util.List;
import java.util.Map;
import java.util.TreeSet;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 高级集合类 和 收集器
 * 5.3.1
 * 转换为其他收集器
 *
 *
 * @author Conceit
 * @since 1.0.0, 2021/9/27
 */
public class IntoOtherCollections {

    public static void main(String[] args) {

        //收集为集合
        //不需要指定具体的类型 stream自动挑选类型
        //如果需要指定类型可使用toCollection()

        //收集成为list
        //collect(Collectors.toList());
        SampleData.albumAllStream.map(Album::getName).collect(Collectors.toList());


        //收集成为set
        //collect(Collectors.toSet());
        SampleData.albumAllStream.map(Album::getName).collect(Collectors.toSet());

        //收集成为map
        //collect(Collectors.toMap());
        //Collectors.toMap 有三个重载方法
        //此示范歌曲的name为Key,歌曲对象为value
        Map<String,Track> map=SampleData.albumAllStream.flatMap(Album::getTracks).collect(Collectors.toMap(Track::getName, Function.identity()));


        //自定义选择实现类
        SampleData.albumAllStream.map(Album::getName).collect(Collectors.toCollection(TreeSet::new));
    }
}
